package com.info.zhiduoduo.common.utils;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;

import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;

public class WordUtil {

	/**
	 * 生成word文件
	 * @param dataMap word中需要展示的动态数据，用map集合来保存
	 * @param templateName word模板名称，例如：test.ftl
	 * @param filePath 文件生成的目标路径，例如：D:/wordFile/
	 * @param fileName 生成的文件名称，例如：test.doc
	 */
	@SuppressWarnings("unchecked")
	public static void createWord(Map dataMap, String templateName, String filePath, String fileName) throws Exception{
			//创建配置实例
			Configuration configuration = new Configuration();

			//设置编码
			configuration.setEncoding(Locale.getDefault(), "utf-8");

			//ftl模板文件
			configuration.setTemplateLoader(new ClassTemplateLoader(WordUtil.class.getClassLoader(), "/templates"));

			//获取模板
			Template template = configuration.getTemplate(templateName);

			//输出文件
			File outFile = new File(filePath+File.separator+fileName);

			//如果输出目标文件夹不存在，则创建
			if (!outFile.getParentFile().exists()){
				outFile.getParentFile().mkdirs();
			}

			//将模板和数据模型合并生成文件
			Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));


			//生成文件
			template.process(dataMap, out);

			//关闭流
			out.flush();
			out.close();
	}

	/**
	 * 生成html文件
	 * @param dataMap html中需要展示的动态数据，用map集合来保存
	 * @param templateName word模板名称，例如：test.ftl
	 * @param outPutFilePath 文件生成的目标路径，例如：D:/wordFile/
	 * @param pdfFileName  生成的文件名称，例如：test.html
	 */
	@SuppressWarnings("unchecked")
	public static void createHtmlToPdf(Map dataMap, String templateName, String outPutFilePath, String pdfFileName) throws Exception {
		//创建配置实例
		Configuration configuration = new Configuration();
		//设置编码
		configuration.setEncoding(Locale.getDefault(), "utf-8");
		//ftl模板文件
		configuration.setTemplateLoader(new ClassTemplateLoader(WordUtil.class.getClassLoader(), "/templates"));
		//获取模板
		Template template = configuration.getTemplate(templateName);
		//输出html临时文件
		File htmlFile = File.createTempFile(UUID.randomUUID().toString(),".html");

		//将模板和数据模型合并生成文件
		Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
		//生成文件
		template.process(dataMap, out);
		//关闭流
		out.flush();
		out.close();
		//转pdf
		ConvertPdfFile.convert(htmlFile.getPath(), outPutFilePath, pdfFileName);
		//删除html临时文件
		htmlFile.delete();
	}
}
